package dfbz.com.service;

import dfbz.com.model.User;
import dfbz.com.model.UserFocus;

import java.util.List;
import java.util.Map;

/**
 * 处理用户业务逻辑的接口
 * @author dullwolf
 */
public interface UserService {


    /**
     * 通过用户名查找该用户
     * @param username 用户名
     * @return 返回User对象
     */
    User findUserByName(String username);

    User findUserByEmail(String email);

    /**
     * 通过用户ID获取用户基本信息(包括部门名字)
     * @param userId 用户ID
     * @return Map对象（其中包括部门名字，以及用户的基本信息）
     */
    Map<String,Object> findUserBaseById(Integer userId);

    /**
     * 新增用户
     * @param email 邮箱账户
     * @param username 用户名
     * @param password 密码
     */
    void addUser(String email, String username, String password);

    /**
     * 更新用户的登录时间
     * @param id 用户ID
     */
    void updateLoginTime(Integer id);

    /**
     * 重置用户密码
     *
     * @param userId  用户Id
     * @param password 用户新密码
     */
    void resetPass(Integer userId, String password);

    /**
     * 分页查询用户列表信息
     * @param page 当前页
     * @return List<Map>对象
     */
    List<Map<String, Object>> findList(Integer userId, int page, String search);

    /**
     * 获取用户列表总数
     * @return 总数量
     */
    long findTotalUserCount();

    /**
     * 根据ufId删除关注表的数据
     * @param ufId 关注表主键ID
     */
    void unFollow(Integer ufId);

    /**
     * 通过当前用户ID和关注的用户ID查询关注表数据
     * @param userId 当前用户ID
     * @param userFocusId 关注的用户ID
     * @return 关注表数据信息
     */
    UserFocus findFollowData(Integer userId, Integer userFocusId);

    /**
     * 关注用户
     * @param userId 当前用户ID
     * @param userFocusId 关注的用户ID
     */
    void followUser(Integer userId, Integer userFocusId);


}
